@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

:: PGM PostgreSQL管理平台启动脚本 (Windows版本)

echo === PGM PostgreSQL管理平台 ===
echo 开始启动流程...

:: 检查Go环境
where go >nul 2>&1
if %errorlevel% neq 0 (
    echo 错误: Go未安装或不在PATH中
    pause
    exit /b 1
)

for /f "tokens=3" %%i in ('go version') do set GO_VERSION=%%i
echo 检测到Go版本: %GO_VERSION%

:: 检查配置文件
if not exist "configs\config.yaml" (
    echo 警告: 配置文件不存在，将使用默认配置
    if not exist "configs" mkdir configs
    
    echo 是否创建默认配置文件? (y/n):
    set /p create_config=
    if /i "!create_config!"=="y" (
        (
            echo server:
            echo   port: 8080
            echo   host: localhost
            echo   mode: debug
            echo.
            echo database:
            echo   host: localhost
            echo   port: 5432
            echo   user: postgres
            echo   password: ""
            echo   dbname: ""
            echo   sslmode: disable
            echo   timezone: UTC
            echo.
            echo web:
            echo   static_path: ./web/static
            echo   template_path: ./web/templates
            echo.
            echo logging:
            echo   level: info
            echo   format: json
            echo.
            echo mapping:
            echo   config_file: ./configs/table_mapping.yaml
        ) > configs\config.yaml
        echo 默认配置文件已创建
    )
)

:: 如果可执行文件不存在，则构建
if not exist "pgm.exe" (
    echo 正在安装Go依赖...
    go mod download
    if %errorlevel% neq 0 (
        echo 依赖安装失败
        pause
        exit /b 1
    )
    echo 依赖安装完成
    
    echo 正在构建项目...
    for /f "delims=" %%i in ('powershell -command "Get-Date -Format 'yyyy-MM-dd HH:mm:ss'"') do set BUILD_TIME=%%i
    
    go build -ldflags "-X 'main.BuildTime=%BUILD_TIME%'" -o pgm.exe cmd\server\main.go
    if %errorlevel% neq 0 (
        echo 构建失败
        pause
        exit /b 1
    )
    echo 构建完成
) else (
    echo 发现已存在的可执行文件
)

:: 解析命令行参数
set ARGS=
:parse_args
if "%1"=="" goto start_server
if "%1"=="--db" (
    set ARGS=%ARGS% -db %2
    shift
    shift
    goto parse_args
)
if "%1"=="--database" (
    set ARGS=%ARGS% -db %2
    shift
    shift
    goto parse_args
)
if "%1"=="--host" (
    set ARGS=%ARGS% -dbhost %2
    shift
    shift
    goto parse_args
)
if "%1"=="--dbhost" (
    set ARGS=%ARGS% -dbhost %2
    shift
    shift
    goto parse_args
)
if "%1"=="--user" (
    set ARGS=%ARGS% -dbuser %2
    shift
    shift
    goto parse_args
)
if "%1"=="--dbuser" (
    set ARGS=%ARGS% -dbuser %2
    shift
    shift
    goto parse_args
)
if "%1"=="--password" (
    set ARGS=%ARGS% -dbpass %2
    shift
    shift
    goto parse_args
)
if "%1"=="--dbpass" (
    set ARGS=%ARGS% -dbpass %2
    shift
    shift
    goto parse_args
)
if "%1"=="--port" (
    set ARGS=%ARGS% -port %2
    shift
    shift
    goto parse_args
)
if "%1"=="--config" (
    set ARGS=%ARGS% -config %2
    shift
    shift
    goto parse_args
)
if "%1"=="-h" goto show_help
if "%1"=="--help" goto show_help

echo 未知参数: %1
goto show_help

:start_server
echo 正在启动PGM服务...
pgm.exe %ARGS%
goto end

:show_help
echo.
echo PGM PostgreSQL管理平台启动脚本
echo.
echo 用法: %0 [选项]
echo.
echo 选项:
echo   --db, --database DB_NAME    数据库名称
echo   --host, --dbhost HOST        数据库主机 (默认: localhost)
echo   --user, --dbuser USER        数据库用户名 (默认: postgres)
echo   --password, --dbpass PASS    数据库密码
echo   --port PORT                  服务端口 (默认: 8080)
echo   --config PATH                配置文件路径 (默认: ./configs)
echo   -h, --help                   显示此帮助信息
echo.
echo 示例:
echo   %0 --db myapp --user postgres --password mypass
echo   %0 --db myapp --port 9090
echo.
pause

:end